<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // // 1. 封装函数,求和,要有参数1 2 3 4 5   ,要有返回值    15
    // // 1 2 3 4 5  
    // function getSum(arr = []) {
    //   let sum = 0;  // 是局部变量,只能function{}生效,作用域是函数内部
    //   for (let i = 0; i < arr.length; i++) {
    //     sum += arr[i]
    //   }
    //   console.log(bbb);
      
    //   return sum;
    // }

    // // // 试着在{}外面调用 sum
    // // console.log(sum);




    // // 先用变量接收返回值
    // let sum = getSum([10, 20, 30, 40, 50])  // sum的定义出现了2次,却不冲突 ,全局
    // // 因为作用域不一样,生效的范围不一样
    // console.log(sum);

    // // console.log(getSum([1, 2, 3, 4, 5]));

    // function fn() {
    //   // 函数内，有定义sum
    //   let sum = 1;
    //   console.log(sum); // 打印了没？
    //   let bbb = 666;

    // }
    

    // fn()
    // console.log(bbb);  //X
    

    // 全局变量（全局生效，包括局部里），局部变量（只在选定的局部内生效）


    //  let x = 1;
    // function fn() {       
    //   console.log(x); 
    // }

// 闭包

    // fn()
    let x =1; // 局部变量只能自己局部范围使用
      // 提升作用域。将局部变全局

    function fn(){
      
      console.log(x+1);   
      x = x +1;   
    }

    function fn2(){
      // let x =1;// 另一个局部要用怎么办
      console.log(x+2);      
    }

    fn()
    fn2()



  </script>
</body>

</html>